package com.hlf.modules.base.mapper;

import com.hlf.common.page.Page;
import com.hlf.modules.base.entity.BaseModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 基础数据持久层接口，E=entity
 * 
 * @author shuliangxing
 *
 * @date 2017年3月23日 下午3:55:01
 */
@Mapper
public interface BaseMapperr<E extends BaseModel> {

    /**
     * 根据id硬删除
     *
     * @param id
     * @return 数据库受影响行数
     * @author shuliangxing
     * @date 2017年3月23日 下午4:30:49
     */
    int deleteByPrimaryKey(String id);

    /**
     * 根据id软删除
     *
     * @param id
     * @return 数据库受影响行数
     * @author shuliangxing
     * @date 2017年3月23日 下午4:30:49
     */
    int deleteByPrimaryKeySoft(String id);

    /**
     * 全字段新增
     *
     * @param record
     *            实体对象
     * @return 数据库受影响行数
     * @author shuliangxing
     * @date 2017年3月23日 下午4:31:25
     */
    int insert(E record);

    /**
     * 根据非空字段新增
     *
     * @param record
     *            实体对象
     * @return 数据库受影响行数
     * @author shuliangxing
     * @date 2017年3月23日 下午4:31:27
     */
    int insertSelective(E record);

    /**
     * 根据id查询
     *
     * @param id
     * @return 实体对象
     * @author shuliangxing
     * @date 2017年3月23日 下午4:31:31
     */
    E selectByPrimaryKey(String id);

    /**
     * 根据id更新非空字段
     *
     * @param record
     *            实体对象
     * @return 数据库受影响行数
     * @author shuliangxing
     * @date 2017年3月23日 下午4:31:34
     */
    int updateByPrimaryKeySelective(E record);

    /**
     * 根据id更新全字段
     *
     * @param record
     *            实体对象
     * @return 数据库受影响行数
     * @author shuliangxing
     * @date 2017年3月23日 下午4:31:36
     */
    int updateByPrimaryKey(E record);

    /**
     * 分页查询
     *
     * @param entity
     *            查询参数对象
     * @param page
     *            分页对象
     * @return 对象结果集
     * @author shuliangxing
     * @date 2017年3月23日 下午4:36:59
     */
    List<E> selectForPage(@Param(value = "e") E entity, @Param(value = "p") Page page);

    /**
     * 分页时查询总记录数
     *
     * @param entity
     *            查询参数对象
     * @return 总记录数
     * @author shuliangxing
     * @date 2017年3月23日 下午4:37:31
     */
    int selectForPageCount(@Param(value = "e") E entity);
}
